#!/usr/bin/env node

/**
 * 本地链接设置脚本
 * 自动化 npm link 流程
 */

import { execSync } from 'child_process';
import fs from 'fs';
import path from 'path';

const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'));

console.log('🔗 ContentFlow Shared Library 本地链接设置\n');

function runCommand(command, description) {
  console.log(`📋 ${description}`);
  console.log(`💻 执行: ${command}`);
  
  try {
    const output = execSync(command, { 
      encoding: 'utf8',
      stdio: 'pipe'
    });
    
    if (output.trim()) {
      console.log(`✅ 输出: ${output.trim()}`);
    } else {
      console.log('✅ 完成');
    }
    return true;
  } catch (error) {
    console.log(`❌ 错误: ${error.message}`);
    return false;
  }
}

async function setupLocalLink() {
  console.log(`📦 包名: ${packageJson.name}`);
  console.log(`📌 版本: ${packageJson.version}\n`);

  // 1. 检查构建文件
  console.log('1️⃣ 检查构建文件');
  const buildFiles = [
    'dist/esm/index.js',
    'dist/cjs/index.cjs',
    'dist/types/index.d.ts'
  ];

  let needsBuild = false;
  for (const file of buildFiles) {
    if (!fs.existsSync(file)) {
      console.log(`❌ 缺少构建文件: ${file}`);
      needsBuild = true;
    } else {
      console.log(`✅ 构建文件存在: ${file}`);
    }
  }

  // 2. 构建项目（如果需要）
  if (needsBuild) {
    console.log('\n2️⃣ 构建项目');
    const buildSuccess = runCommand('npm run build', '构建项目');
    if (!buildSuccess) {
      console.log('\n❌ 构建失败，请检查错误信息');
      process.exit(1);
    }
  } else {
    console.log('\n2️⃣ 构建文件已存在，跳过构建');
  }

  // 3. 创建全局链接
  console.log('\n3️⃣ 创建全局链接');
  const linkSuccess = runCommand('npm link', '创建全局链接');
  
  if (linkSuccess) {
    console.log('\n🎉 本地链接设置完成！');
    console.log('\n📋 在其他项目中使用此包：');
    console.log(`   cd /path/to/your-project`);
    console.log(`   npm link ${packageJson.name}`);
    console.log('\n📋 在代码中导入：');
    console.log(`   import { StorageAdapterFactory } from '${packageJson.name}';`);
    console.log(`   import { createPlatformHandler } from '${packageJson.name}/platforms';`);
    
    console.log('\n📋 取消链接：');
    console.log(`   # 在使用项目中：npm unlink ${packageJson.name}`);
    console.log(`   # 在此项目中：npm unlink`);
    
    console.log('\n💡 提示：修改源代码后运行 npm run build 重新构建');
  } else {
    console.log('\n❌ 链接设置失败');
    process.exit(1);
  }
}

// 检查是否在正确的目录
if (!fs.existsSync('package.json')) {
  console.log('❌ 请在项目根目录运行此脚本');
  process.exit(1);
}

if (packageJson.name !== '@contentflow/shared') {
  console.log('❌ 此脚本只能在 ContentFlow Shared Library 项目中运行');
  process.exit(1);
}

setupLocalLink().catch(console.error);
